﻿using System;
using System.Collections.Generic;
using System.Linq;
using DLM.Domain.Model;
using DLM.Domain.DTO;

namespace DLM.Services.Interfaces
{
    public interface IUserService
    {
        #region Account
        void Activate(string code);

        void Login(Account account);

        void LogOut();

        void AddAccount(Account account);

        void UpdateAccount(Account account);

        void RemoveAccount(Account account);

        Account GetAccount(int accountID);

        Account GetAccount(string name);

        Account GetAccountByEmail(string email);

        IEnumerable<Account> GetAccount();

        Account GetAccountByCode(string code);
        #endregion

        #region User
        void AddUser(User user);

        void UpdateUser(User user);

        void SetBlack(int userID, int accountID);

        void Remove(User user);

        User GetUser(int userID);

        User GetUserByAccount(int accountID);

        User GetUser(string name);

        void ActiveUser(int userID);

        IEnumerable<User> GetUser();

        IEnumerable<User> GetUser(int pageIndex, int pageSize);

        IEnumerable<User> Participated(int partyID, int pageIndex, int pageSize);

        IEnumerable<User> GetBlackList(int pageIndex, int pageSize);

        IEnumerable<User> GetValidateUser(int pageIndex, int pageSize);


        IEnumerable<BillBoard> ShowBillBoard();

        IEnumerable<User> SearchUser(string type,string parameter, int pageIndex, int pageSize);

        IEnumerable<User> GetUser(DateTime begDate, DateTime endDate);
         #endregion

        #region Friend
        IEnumerable<FriendDTO> FriendRequest(string userName, int pageIndex, int pageSize);

        IEnumerable<FriendDTO> MyFriend(string userName, int pageIndex, int pageSize);

        Friend FriendDetail(int friendID);

        void ConfirmFriend(Friend friend);

        void AddFriend(string userName, int friendID);

        IEnumerable<User> Friends(string accountName, int pageIndex, int pageSize);

        IEnumerable<FriendDTO> FriendHistory(string accountName, int pageIndex, int pageSize);
        #endregion

        #region Photo
        void AddPhoto(Photo photo);

        void UpdatePhoto(Photo photo);

        void RemovePhoto(int photoID);

        IEnumerable<Photo> GetPhotos(int userID);

        Photo GetPhoto(int photoID);

        bool HasPhoto(int userID);
        #endregion

        #region Bonus
        Bonus GetBonus(int userID);

        void UpdateBonus(Bonus bonus);

        void UpdateBonus(IList<Bonus> list);

        IEnumerable<Bonus> GetBonus(int pageIndex, int pageSize);

        IEnumerable<BonusDTO> GetBonusDTO(int pageIndex, int pageSize);
        #endregion

        #region Message
        Message GetMessage(int messageID);

        IEnumerable<Message> GetMessage(string accountName,int pageIndex,int pageSize);

        void DeleteMessage(int messageID);

        void AddMessage(Message message);

        void ConfirmeMessage(int id);
        #endregion

        #region Notice
        void AddNotice(Notice notice);

        void UpdateNotice(Notice notice);

        void RemoveNotice(Notice notice);

        IEnumerable<Notice> GetNotice(int pageIndex, int pageSize);

        Notice GetNotice(int noticeID);
        #endregion


        #region Salutation
        void AddGreet(string userName,int greetID,int type,string message);

        void UpdateGreet(int id);

        void RemoveGreet(int greetID);

        IEnumerable<SalutationDTO> GetMyGreet(string accountName,int pageIndex,int pageSize);

        IEnumerable<SalutationDTO> GetGreetHistory(string accountName, int pageIndex, int pageSize);

        IEnumerable<SalutationDTO> GetAgreedGreet(string accountName, int pageIndex, int pageSize);

        bool IsGreeted(string accountName, int greetID);

        #endregion

        #region Break An Appoiontment
        void AddAppointment(int userID,int partyID);

        void UpdateAppointment(int bid,int userID, int partyID);

        void RemoveAppointment(int bid);

        IEnumerable<BreakAppointment> GetBreakAppByUser(int userID,int pageIndex,int pageSize);

        IEnumerable<BreakAppointment> GetBreakAppByParty(int partyID,int pageIndex,int pageSize);
        #endregion

        #region User view count
        void AddView(int userID,string browserIP);
        #endregion



    }
}
